/*
* Copyright 2014-2015 CyberVision, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kaaproject.avro.ui.sandbox.client.mvp.activity;
import java.util.ArrayList;
import java.util.List;
import org.kaaproject.avro.ui.gwt.client.util.BusyAsyncCallback;
import org.kaaproject.avro.ui.sandbox.client.AvroUiSandbox;
import org.kaaproject.avro.ui.sandbox.client.mvp.ClientFactory;
import org.kaaproject.avro.ui.sandbox.client.mvp.place.MainPlace;
import org.kaaproject.avro.ui.sandbox.client.mvp.view.FormConstructorView;
import org.kaaproject.avro.ui.sandbox.client.mvp.view.MainView;
import org.kaaproject.avro.ui.sandbox.client.servlet.ServletHelper;
import org.kaaproject.avro.ui.sandbox.client.util.Utils;
import org.kaaproject.avro.ui.shared.RecordField;
import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
public class MainActivity extends AbstractActivity {
private final ClientFactory clientFactory;
private MainView view;
private List<HandlerRegistration> registrations = new ArrayList<HandlerRegistration>();
public MainActivity(MainPlace place,
ClientFactory clientFactory) {
this.clientFactory = clientFactory;
}
@Override
public void start(AcceptsOneWidget containerWidget, EventBus eventBus) {
view = clientFactory.getMainView();
bind(eventBus);
containerWidget.setWidget(view.asWidget());
view.getRecordConstructorView().getGenerateRecordButton().setEnabled(false);
view.getRecordConstructorView().getGenerateRecordButton().setVisible(false);
}
@Override
public void onStop() {
for (HandlerRegistration registration : registrations) {
registration.removeHandler();
}
registrations.clear();
}
private void bind(final EventBus eventBus) {
final FormConstructorView schemaConstructor = view.getSchemaConstructorView();
registrations.add(schemaConstructor.getGenerateRecordButton().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
doGenerateRecordForm();
}
}));
registrations.add(schemaConstructor.getShowJsonButton().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
showSchemaJson();
schemaConstructor.fireChanged();
}
}));
registrations.add(schemaConstructor.getUploadJSONButton().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
uploadSchemaFromJson();
}
}));
registrations.add(schemaConstructor.getUploadFileForm().addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
@Override
public void onSubmitComplete(FormPanel.SubmitCompleteEvent submitCompleteEvent) {
String result = submitCompleteEvent.getResults();
if ("".equals(result)) {
view.setErrorMessage(Utils.constants.uploadEmptyFileError());
} else {
schemaConstructor.setFormJson(result);
}
}
}));
registrations.add(schemaConstructor.getDownloadJsonButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String json = schemaConstructor.getFormJson().getValue();
AvroUiSandbox.getAvroUiSandboxService().uploadJsonToFile(json, new BusyAsyncCallback<String>() {
@Override
public void onSuccessImpl(String result) {
ServletHelper.downloadJsonSchema(result);
}
@Override
public void onFailureImpl(Throwable caught) {
view.setErrorMessage(Utils.getErrorMessage(caught));
}
});
}
}));
final FormConstructorView recordConstructor = view.getRecordConstructorView();
registrations.add(recordConstructor.getShowJsonButton().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
showRecordJson();
recordConstructor.fireChanged();
}
}));
registrations.add(recordConstructor.getUploadJSONButton().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
uploadRecordFromJson();
}
}));
registrations.add(recordConstructor.getUploadFileForm().addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
@Override
public void onSubmitComplete(FormPanel.SubmitCompleteEvent submitCompleteEvent) {
String result = submitCompleteEvent.getResults();
if ("".equals(result)) {
view.setErrorMessage(Utils.constants.uploadEmptyFileError());
} else {
recordConstructor.setFormJson(result);
}
}
}));
registrations.add(recordConstructor.getDownloadJsonButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String json = recordConstructor.getFormJson().getValue();
AvroUiSandbox.getAvroUiSandboxService().uploadJsonToFile(json, new BusyAsyncCallback<String>() {
@Override
public void onSuccessImpl(String result) {
ServletHelper.downloadJsonRecord(result);
}
@Override
public void onFailureImpl(Throwable caught) {
view.setErrorMessage(Utils.getErrorMessage(caught));
}
});
}
}));
registrations.add(clientFactory.getHeaderView().getResetButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
view.reset();
loadEmptySchemaForm();
}
}));
view.reset();
loadEmptySchemaForm();
}
private void doGenerateRecordForm() {
RecordField schemaForm = view.getSchemaConstructorView().getValue();
AvroUiSandbox.getAvroUiSandboxService().getJsonStringFromSchemaForm(schemaForm,
new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
view.setErrorMessage(Utils.getErrorMessage(caught));
}
@Override
public void onSuccess(String result) {
view.clearMessages();
AvroUiSandbox.getAvroUiSandboxService().generateFormFromSchema(result,
new BusyAsyncCallback<RecordField>() {
@Override
public void onSuccessImpl(RecordField result) {
view.clearMessages();
view.getRecordConstructorView().setValue(result, true);
}
@Override
public void onFailureImpl(Throwable caught) {
view.setErrorMessage(Utils.getErrorMessage(caught));
}
});
}
});
}
private void showRecordJson() {
RecordField recordField = view.getRecordConstructorView().getValue();
view.clearMessages();
if (recordField!= null && recordField.isValid()) {
AvroUiSandbox.getAvroUiSandboxService().getJsonStringFromRecord(recordField,
new BusyAsyncCallback<String>() {
@Override
public void onSuccessImpl(String result) {
view.clearMessages();
view.getRecordConstructorView().setFormJson(result);
}
@Override
public void onFailureImpl(Throwable caught) {
view.setErrorMessage(Utils.getErrorMessage(caught));
}
});
} else {
view.setErrorMessage(Utils.constants.unableToGenerateJsonIncompleteRecordForm());
view.getRecordConstructorView().setFormJson("");
}
}
private void uploadRecordFromJson() {
RecordField schemaForm = view.getSchemaConstructorView().getValue();
AvroUiSandbox.getAvroUiSandboxService().getJsonStringFromSchemaForm(schemaForm,
new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
view.setErrorMessage(Utils.getErrorMessage(caught));
}
@Override
public void onSuccess(String avroSchema) {
view.clearMessages();
String json = view.getRecordConstructorView().getFormJson().getValue();
AvroUiSandbox.getAvroUiSandboxService().generateFormDataFromJson(avroSchema,
json, new BusyAsyncCallback<RecordField>() {
@Override
public void onSuccessImpl(RecordField result) {
view.clearMessages();
view.getRecordConstructorView().setValue(result, true);
}
@Override
public void onFailureImpl(Throwable caught) {
view.setErrorMessage(Utils.getErrorMessage(caught));
}
});
}
});
}
private void showSchemaJson() {
RecordField schemaField = view.getSchemaConstructorView().getValue();
if (schemaField!= null && schemaField.isValid()) {
AvroUiSandbox.getAvroUiSandboxService().getJsonStringFromSchemaForm(schemaField,
new BusyAsyncCallback<String>() {
@Override
public void onSuccessImpl(String result) {
view.clearMessages();
view.getSchemaConstructorView().setFormJson(result);
}
@Override
public void onFailureImpl(Throwable caught) {
view.setErrorMessage(Utils.getErrorMessage(caught));
}
});
} else {
view.clearMessages();
view.getSchemaConstructorView().setFormJson("");
}
}
private void uploadSchemaFromJson() {
String avroSchema = view.getSchemaConstructorView().getFormJson().getValue();
AvroUiSandbox.getAvroUiSandboxService().generateSchemaFormFromSchema(avroSchema,
new BusyAsyncCallback<RecordField>() {
@Override
public void onSuccessImpl(RecordField result) {
view.clearMessages();
view.getSchemaConstructorView().setValue(result, true);
}
@Override
public void onFailureImpl(Throwable caught) {
view.setErrorMessage(Utils.getErrorMessage(caught));
}
});
}
private void loadEmptySchemaForm() {
AvroUiSandbox.getAvroUiSandboxService().getEmptySchemaForm(new BusyAsyncCallback<RecordField>() {
@Override
public void onSuccessImpl(RecordField result) {
view.clearMessages();
view.getSchemaConstructorView().setValue(result, true);
}
@Override
public void onFailureImpl(Throwable caught) {
view.setErrorMessage(Utils.getErrorMessage(caught));
}
});
}
}